﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AccesoDatos.DAO
{
    public abstract class DAO_Base_modelo_entidades : DAO_Base
    {
        // Cotrolador de acceso a la base de datos para Localidades
        protected static Modelos.ModeloEntidadesContainer acceso_ModeloEntidades;
        private string  original_db;
        private bool se_hizo_cambio_de_db = false;
     
        public DAO_Base_modelo_entidades()  
        {
            crearConexion();
        }


        protected void renovarConexion(){

            // Cierro la conexion actual
            cerrarConexion();
            // Abro una neuva conexion
            crearConexion();
        }

        protected void cambiar_base_de_datos(string base_de_datos)
        {
            
            acceso_ModeloEntidades.Database.Connection.ChangeDatabase(base_de_datos);

            se_hizo_cambio_de_db = true;
        }

        protected void volver_a_base_de_datos_orginal()
        {
            if (se_hizo_cambio_de_db)
            {
                acceso_ModeloEntidades.Database.Connection.ChangeDatabase(original_db);
            }
        }

        protected void cerrarConexion()
        {
            acceso_ModeloEntidades.Dispose();
        }

        protected void crearConexion()
        {
            if (acceso_ModeloEntidades == null)
            {
                // Obtengo una instancia de la nueva conexion
                acceso_ModeloEntidades = new Modelos.ModeloEntidadesContainer();
                // Me apunto el nombre de esta conexion, como la conexion original (para futuros cambios de db)
                original_db = acceso_ModeloEntidades.Database.Connection.Database;
            }

        }


        public void guardar()
        {
            acceso_ModeloEntidades.SaveChanges();
        }
    }
}
